// 产品数据模型定义和接口
// 支持需求 3.3, 3.5

/**
 * 产品类型枚举
 */
export const PRODUCT_TYPES = {
    WEBSITE: 'website',
    APP: 'app'
}

/**
 * 产品状态枚举
 */
export const PRODUCT_STATUS = {
    ACTIVE: 'active',
    INACTIVE: 'inactive'
}

/**
 * 创建空的产品对象
 * @returns {Object} 空的产品对象
 */
export function createEmptyProduct() {
    return {
        id: null,
        title: '',
        description: '',
        type: PRODUCT_TYPES.WEBSITE,
        url: null,
        file_path: null,
        thumbnail_url: null,
        created_at: null,
        updated_at: null
    }
}

/**
 * 创建产品表单的初始数据
 * @returns {Object} 表单初始数据
 */
export function createEmptyProductForm() {
    return {
        title: '',
        description: '',
        type: PRODUCT_TYPES.WEBSITE,
        url: '',
        file: null,
        thumbnail: null
    }
}

/**
 * 验证产品对象是否有效
 * @param {Object} product - 产品对象
 * @returns {boolean} 是否有效
 */
export function isValidProduct(product) {
    if (!product || typeof product !== 'object') {
        return false
    }

    // 检查必需字段
    const requiredFields = ['title', 'description', 'type']
    for (const field of requiredFields) {
        if (!product[field] || product[field].trim().length === 0) {
            return false
        }
    }

    // 检查产品类型
    if (!Object.values(PRODUCT_TYPES).includes(product.type)) {
        return false
    }

    // 根据类型检查特定字段
    if (product.type === PRODUCT_TYPES.WEBSITE && !product.url) {
        return false
    }

    if (product.type === PRODUCT_TYPES.APP && !product.file_path) {
        return false
    }

    return true
}

/**
 * 格式化产品数据用于显示
 * @param {Object} product - 原始产品数据
 * @returns {Object} 格式化后的产品数据
 */
export function formatProductForDisplay(product) {
    if (!product) return null

    return {
        ...product,
        title: product.title || '未命名产品',
        description: product.description || '暂无描述',
        type_label: product.type === PRODUCT_TYPES.WEBSITE ? '网站' : '应用程序',
        created_date: product.created_at ? new Date(product.created_at).toLocaleDateString('zh-CN') : '',
        updated_date: product.updated_at ? new Date(product.updated_at).toLocaleDateString('zh-CN') : ''
    }
}

/**
 * 将表单数据转换为产品数据
 * @param {Object} formData - 表单数据
 * @returns {Object} 产品数据
 */
export function formDataToProduct(formData) {
    const productData = {
        title: formData.title?.trim() || '',
        description: formData.description?.trim() || '',
        type: formData.type || PRODUCT_TYPES.WEBSITE
    }

    // 根据类型设置相应字段
    if (formData.type === PRODUCT_TYPES.WEBSITE) {
        productData.url = formData.url?.trim() || null
        productData.file_path = null
    } else if (formData.type === PRODUCT_TYPES.APP) {
        productData.url = null
        // file_path 将在文件上传后设置
    }

    return productData
}